import jdk.swing.interop.SwingInterOpUtils;

import javax.xml.transform.Source;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.PriorityQueue;

public class Main {
    public static void main(String[] args) {
//     priorityqueue()的介绍,这是没有传参的构造方法,默认的大小是11.
        PriorityQueue<Integer> queue1=new PriorityQueue<>();
//       创建一个新的优先级队列,底层容量是initialCapacity即100
        PriorityQueue<Integer> queue2=new PriorityQueue<>(100);
//        使用一个集合来创建一个优先级队列
        ArrayList<Integer> list=new ArrayList<>();
        list.add(4);
        list.add(3);
        list.add(2);
        list.add(1);
//        使用创建的对象来构建这个队列,这个priorityQueue默认是小根堆,所以peek()的时候,出的是最小的元素.
//        如果需要是大根堆,则需要自己提供比较器
        PriorityQueue<Integer> queue3=new PriorityQueue<>(new IntCmp());
       queue3.offer(4);
       queue3.offer(3);
       queue3.offer(2);
       queue3.offer(1);
//       queue3.offer(null);
//        boolean offer(E e) 插入元素e,插入成功返回true.r如果插入的对象为空,会返回异常,空间不够时会进行阔扩容
        queue3.peek();
//        E peek()  获取优先级最高的元素,如果优先级队列为空,返回null
//        int size()  获取有效元素的个数
//        void clear()  清空
//        boolean isEmpty() 检测优先级队列是否为空,空返回true;
        Integer tt=queue3.poll();
        System.out.println(tt);

//       由于实现了Comparator接口中的compare方法,并且是t2-t1,所以这里是大根堆
        System.out.println(queue3.peek());
        System.out.println(queue3.size());
        System.out.println(queue3.isEmpty());

        int[] array={1,2,3,4,5,6};
        String aa="12323";
        System.out.println(array.length);
        System.out.println(aa.length());
    }
}

class IntCmp implements Comparator<Integer>{
    @Override
    public int compare(Integer t1,Integer t2){
        return t2-t1;
    }






}
//priorityQueue即优先级队列.priorityQueue是线程不安全的,
//priorityQueue中放置的元素必须要能够比较大小,否则会抛出异常.不能插入nulld对象.
//priorityQueue底层使用了堆这种数据结构,默认情况下是小根堆.即每次peek或者poll元素的时候,都是最小的元素.
//priorityQueue常用的接口介绍
//eufuo1
//那如果是把数据进行升序,是可以建立小根堆,然后依次进行删除操作.
//java对象的比较.优先级队列中是否能够插入对象.

//java对象的比较,基于Comparble接口的比较